在Ruby中有没有办法把一个符号或字符串变成一个同名的类?例如,如果我有一个类classBobdeftalkputs"Hi,I'mbob"endend我在代码中其他地方的一个方法被传递了一个符号:bob,我可以通过某种方式将其转换为类Bob吗?也许像b=:Bob.newb.talk或者有没有办法做类似的事情? 最佳答案 有很多方法可以做到这一点。您缺乏上下文,因此无法选择“最佳”方式。这里有一些方法。Kernel.const_get(:Bob)eval(:Bob.to_s)Kernel.const_get(:bob.to_s.cap
基本上只是检查以确保设置了url参数。我如何在PHP中做到这一点:if(isset($_POST['foo'])&&isset($_POST['bar'])){}这是RoR中isset()的粗略/最佳等价物吗?if(!params['foo'].nil?&&!params['bar'].nil?)end 最佳答案 更接近的匹配可能是#present?#returnstrueifnotnilandnotblankparams['foo'].present?还有一些其他的方法#returnstrueifnilparams['foo'].
以下代码失败world=:worldresult='hello'+worldputsresult#=>can'tconvertSymbolintoString以下代码有效world=:worldresult="hello#{world}"putsresult#=>helloworld为什么?使用ruby1.8.7 最佳答案 字符串插值是一个隐式的to_s调用。所以,像这样:result="hello#{expr}"或多或少等同于此:result="hello"+expr.to_s正如karim79所说,符号不是字符串,但符号确实具有
纯粹出于好奇,有没有更优雅的方法来简单地获取字符串中第一个=符号之后的子字符串?以下工作回馈name=bob:string="option=name=bob"string[string.index('=')+1..-1]只是感觉不太像Ruby。这也有效:string.split('=',2)[1]同样,不是很优雅,特别是因为split正在做额外的不必要的工作。正则表达式是答案吗?对于在字符串中查找单个字符位置的简单性,我觉得这有点矫枉过正:string.match('=(.*)')[1]我不得不想象这是一个极其普遍的情况,不是有一个string.after('=')类型的方法吗?鉴于此
假设我有这个模型:classConversation如何在不使用枚举的数值或不必遍历每个对话的情况下找到所有事件对话?我尝试执行Conversation.where(status::active),但没有产生任何结果。想到的唯一解决方案是遍历所有对话并选择事件对话,但这看起来不是一个好的解决方案。Conversation.all.select{|conversation|conversation.active?}我能做些什么吗? 最佳答案 ActiveRecord::Enum提供基于其值的范围。试试看:Conversation.ac
我有一个包含现有符号链接(symboliclink)的文件系统路径的字符串。我想得到这个链接指向的路径。基本上我想要的是我通过这个hackery获得的相同内容:s="path/to/existing/symlink"`ls-ld#{s}`.scan(/->(.+)/).flatten.last但我想不花钱就去做。 最佳答案 我认为readlink是你要找的:File.readlink("path/to/symlink") 关于ruby-如何获得符号链接(symboliclink)的目标?
我将jquery-mobile与RubyOnRails结合使用。我想创建一个按钮链接,这意味着data-role="button"出现在生成的HTML中。我试过:"button"%>然后,我得到一个错误undefinedlocalvariableormethod`role'for#:0x007fdc25658610>有没有办法使用:xxx符号来转义破折号,还是我应该只使用"xxx"符号?(我同意这是一个表面问题,但我希望我的代码保持一致并且不喜欢异常) 最佳答案 在符号名称周围使用单引号,并带有冒号前缀::'data-role'=>
我有一个Ruby散列,它看起来像:{"id"=>"123","name"=>"test"}我想将其转换为:{:id=>"123",:name=>"test"} 最佳答案 hash={"apple"=>"banana","coconut"=>"domino"}Hash[hash.map{|k,v|[k.to_sym,v]}]#=>{:apple=>"banana",:coconut=>"domino"}@mu太短了:没看到“递归”这个词,但如果你坚持(以及防止不存在的to_sym,只是想提醒一下在Ruby1.81.to_sym==ni
Ruby中的字符串和符号有什么区别,我应该在什么时候使用它们? 最佳答案 主要区别在于表示单个值的多个符号是相同的,而对于字符串则不然。例如:irb(main):007:0>:test.object_id=>83618irb(main):008:0>:test.object_id=>83618irb(main):009:0>:test.object_id=>83618这是对符号:test的三个引用,它们都是同一个对象。irb(main):010:0>"test".object_id=>-605770378irb(main):011:
ruby中symbol的作用是什么?字符串和符号有什么区别?为什么动态创建大量符号不是一个好主意? 最佳答案 符号就像字符串,但它们是不可变的-它们不能被修改。它们只被放入内存一次,这使得它们非常有效地用于哈希中的键之类的东西,但它们会保留在内存中直到程序退出。如果您滥用它们,这会使它们成为内存消耗者。如果您动态创建大量符号,您将分配大量内存,这些内存在程序结束前无法释放。如果您知道您将只动态创建符号(使用string.to_sym):需要反复访问符号不需要修改它们正如我之前所说,它们对于哈希之类的东西很有用-在这种情况下,您更关心